#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct
{
	ElemType data[MaxSize];
	int top;
} SqStack;
void InitStack(SqStack *&s)
{
	s=(SqStack *)malloc(sizeof(SqStack));
	s->top=-1;
}
void DestroyStack(SqStack *&s)
{
	free(s);
} 
bool StackEmpty(SqStack *s)
{
	return (s->top == -1);
}

bool Push(SqStack *&s,ElemType e)
{
	if(s->top==MaxSize-1) 
		return false;
	s->top++;
	s->data[s->top]=e;
	return true; 
} 
bool Pop(SqStack *&s,ElemType &e)
{
	if(s->top==MaxSize-1)
		return false;
	e=s->data[s->top];
	s->top--;
	return true;
} 

bool GetTop(SqStack *s,ElemType &e)
{
	if(s->top == -1)
		return false;
	e=s->data[s->top];
	return true;
} 
int main()
{
	ElemType e;
	SqStack *s;
	printf("（1）初始化栈s\n");
	InitStack(s);
	printf("（2）判断栈s是否非空：%s\n",(StackEmpty(s)? "是":"否"));
	printf("（3）依次进栈元素a、b、c、d、e\n");
	Push(s,'a');
	Push(s,'b');
	Push(s,'c');
	Push(s,'d');
	Push(s,'e');
	printf("（4）判断栈s是否非空：%s\n",((StackEmpty(s))? "是":"否"));
	printf("（5）输出出栈序列");
	while(!StackEmpty(s))  //相当于StackEmpty() != NULL 
	{
		Pop(s,e);
		printf("%c ",e);
	}
	printf("\n");
	printf("（6）判断栈s是否非空：%s\n",((StackEmpty(s))? "是":"否"));
	GetTop(s,e);
	printf("（7）取栈顶元素：%c\n",e);
	printf("（8）释放栈");
	DestroyStack(s); 
	return 0; 
} 
